/* 演示函数指针列表的使用 */
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>


typedef int(*INIT)(void); //定义INIT定型的函数指针

typedef struct PERIPHERAL_INIT_API  //定义包含INIT类型函数指针的结构体
{
  INIT Periperal_Init;//外设初始化接口
}Periperal_Init_Api;

int Peripheral1_Init(void);  // 外设1初始化
int Peripheral2_Init(void);  // 外设2初始化
int Peripheral3_Init(void);  // 外设3初始化

// 定义结构体数组并赋值
Periperal_Init_Api Init_API_List[] = 
{
  Peripheral1_Init,
  Peripheral2_Init,
  Peripheral3_Init
};


int main(int argc,char *argv[])
{
  printf("FuncPointerList Demo\r\n");

  printf("sizeof(Periperal_Init_Api) = %ld\r\n",sizeof(Periperal_Init_Api));
  printf("sizeof(Init_API_List) = %ld\r\n",sizeof(Init_API_List));
  
  for (size_t i = 0; i < sizeof(Init_API_List)/sizeof(Periperal_Init_Api); i++)
  {
    if(Init_API_List[i].Periperal_Init)
    {
      int ret = Init_API_List[i].Periperal_Init();//调用结构体数组中存放的函数指针
    }
  }

  return 0;
}

// 外设1初始化
int Peripheral1_Init(void)
{
  printf("Success! [%s]\r\n",__func__);
  return 1;
}

// 外设2初始化
int Peripheral2_Init(void)
{
  printf("Success! [%s]\r\n",__func__);
  return 1;
}

// 外设3初始化
int Peripheral3_Init(void)
{
  printf("Success! [%s]\r\n",__func__);
  return 1;
}